import axios from 'axios'
import qs from 'qs'

import store from '@/vuex/store';
import router from '@/router'
import Vue from 'vue'
if (process.env.NODE_ENV === "development") {
    //开发环境
    console.log('=== 开发环境 ===');
    // axios.defaults.baseURL = 'http://113.249.103.121:8002'; /* 测试环境 */
    // axios.defaults.baseURL = 'http://192.168.1.100:8002'; /* 本地环境 */
    // axios.defaults.baseURL = 'http://192.168.1.101:8002'; /* 本地环境 */

    axios.defaults.baseURL = 'http://111.120.11.161:8002'; /* 正式环境 */

    // axios.defaults.baseURL = 'http://127.0.0.1:8002';
    // axios.defaults.baseURL = 'https://msapi.3msoft.com.cn';
    // axios.defaults.baseURL = 'http://ne67fdb2.natappfree.cc'; //培训考试部分 联调地址
} else if (process.env.NODE_ENV === "testing") {
    //测试环境
    console.log('=== 测试环境 ===');
    // axios.defaults.baseURL = 'https://msapi.3msoft.com.cn';

    // axios.defaults.baseURL = 'http://113.249.103.121:8002'; /* 测试环境 */
    axios.defaults.baseURL = 'http://111.120.11.161:8002'; /* 正式环境 */
} else if (process.env.NODE_ENV === "production") {
    //正式环境
    console.log('=== 正式环境 ===');
    // axios.defaults.baseURL = 'https://msapi.3msoft.com.cn';

    // axios.defaults.baseURL = 'http://113.249.103.121:8002'; /* 测试环境 */
    axios.defaults.baseURL = 'http://111.120.11.161:8002'; /* 正式环境 */
}

// 需要有代理的路径前缀
const PROXY_PREFIXES = ['/monitor-huace/', '/bohee/'];

axios.interceptors.request.use(
    config => {
        if(localStorage.getItem('COOKIE')){
            config.headers['Authorization'] = localStorage.getItem('COOKIE')
        }

        // 对于代理路径，临时移除baseURL，让webpack代理正常工作
        // 这样可以在保留全局baseURL的同时，让特定路径走代理
        if (PROXY_PREFIXES.some(prefix => config.url && config.url.startsWith(prefix))) {
            // 保存原始baseURL
            config._originalBaseURL = axios.defaults.baseURL;
            // 临时设置为空，这样请求就会直接发送到相对路径
            config.baseURL = '';

            // 气象 边坡 Token
            if(localStorage.getItem('monitorHuaceTokenValue')){
                config.headers['satoken'] = localStorage.getItem('monitorHuaceTokenValue')
            }
        }

        return config;
    },
    error => {
        return Promise.error(error);
    })
// 响应拦截器
axios.interceptors.response.use(
    response => {
        // 如果请求配置中有保存的原始baseURL，恢复它
        if (response.config && response.config._originalBaseURL) {
            // 注意：这里不需要恢复全局baseURL，因为我们只是在单个请求配置中临时修改
            // axios.defaults.baseURL = response.config._originalBaseURL;
        }

        if(response.headers && response.headers.authorization){
            localStorage.setItem('COOKIE',response.headers.authorization)
        }
        const state = response.status;
        const code = response.data.code;
        if (state == 200) {
            if (code == 402) {
                localStorage.removeItem("COOKIE")
                router.replace({
                    path: '/login',
                    query: {
                        redirect: router.currentRoute.path
                    }
                })
            } else {
                return Promise.resolve(response.data)
            }
        } else {
            return Promise.reject(response)
        }
    },
    error => {
        // 错误处理时也恢复原始baseURL
        if (error.config && error.config._originalBaseURL) {
            // 同样不需要恢复全局baseURL
        }
        console.log("网络异常")
        return Promise.reject(error)
    }
)

Vue.prototype.$axios = axios;

export default {
    post(url, data, config) {
        return axios({
            method: 'post',
            url,
            data: data,
            headers: config ? config : {
                'Content-Type': 'application/json',
                orgId:store.state.porjectObject.orgId?store.state.porjectObject.orgId:''
            }
        })
    },
    postform(url, data) {
        return axios({
            method: 'post',
            url,
            data: qs.stringify(data),
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
            }
        })
    },
    get(url, params) {
        return axios({
            method: 'get',
            url,
            params,
            headers: {
                orgId:store.state.porjectObject.orgId?store.state.porjectObject.orgId:''
            }
        })
    }
}
